attiny_SPI_Server_defunct.ino 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <Mirf.h>
  2. #include <nRF24L01.h>
  3. #include <MirfSpiDriver.h>
  4. #define _U_SPI_PORT PORTB
  5. #define MOSI 0
  6. #define MISO 1
  7. #define SCK 2
  8. #define SS 3
  9. #define LED 4
  10. byte data[1];
  11. class SoftSpi : public MirfSpiDriver{
  12. public:
  13. virtual uint8_t transfer(uint8_t data);
  14. virtual void begin();
  15. virtual void end();
  16. };
  17. uint8_t SoftSpi::transfer(uint8_t data){
  18. unsigned char bit = 0;
  19. uint8_t ret=0;
  20. for(bit = 0; bit < 8; bit++) // Loop through 8 bits
  21. {
  22. if(data & 0x80) digitalWrite(MOSI,HIGH); // If bit(7) of "data" is high
  23. else digitalWrite(MOSI,LOW); // if bit(7) of "data" is low
  24. digitalWrite(SCK,HIGH); // Serial Clock Rising Edge
  25. data <<= 1; // Shift "data" to the left by one bit
  26. if(digitalRead(MISO)==HIGH) ret |= 0x01; // If bit of slave data is high
  27. else ret &= ~0x01; // if bit of slave data is low
  28. ret <<=1;
  29. digitalWrite(SCK,LOW); // Serial Clock Falling Edge
  30. }
  31. return ret; // Returns shifted data in value
  32. }
  33. void SoftSpi::begin(){
  34. }
  35. void SoftSpi::end(){
  36. }
  37. SoftSpi MirfSoftwareSpi;
  38. void setup() {
  39. pinMode(MOSI, OUTPUT);
  40. pinMode(MISO, INPUT);
  41. pinMode(SCK, OUTPUT);
  42. pinMode(SS, OUTPUT);
  43. pinMode(LED, OUTPUT);
  44. // Setup
  45. Mirf.spi = &MirfSoftwareSpi;
  46. Mirf.csnPin = 5;
  47. Mirf.init();
  48. Mirf.setRADDR((byte *)"servl");
  49. Mirf.payload = 1;
  50. Mirf.config();
  51. }
  52. void loop() {
  53. if(!Mirf.isSending() && Mirf.dataReady()){
  54. Mirf.getData(data);
  55. if(data[0] == 1) digitalWrite(LED, HIGH);
  56. else if(data[0]==2) digitalWrite(LED,LOW);
  57. }
  58. }