attiny_SPI_Client_defunct.ino 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include <Mirf.h>
  2. #include <nRF24L01.h>
  3. #include <MirfSpiDriver.h>
  4. #include "avr/interrupt.h"
  5. #define _U_SPI_PORT PORTB
  6. #define MOSI 0
  7. #define MISO 1
  8. #define SCK 2
  9. #define SS 3
  10. #define BUTTON 4
  11. int value = HIGH;
  12. int prev = HIGH;
  13. uint8_t send;
  14. byte data[1];
  15. class SoftSpi : public MirfSpiDriver{
  16. public:
  17. virtual uint8_t transfer(uint8_t data);
  18. virtual void begin();
  19. virtual void end();
  20. };
  21. uint8_t SoftSpi::transfer(uint8_t data){
  22. unsigned char bit = 0;
  23. for(bit = 0; bit < 8; bit++) // Loop through 8 bits
  24. {
  25. if(data & 0x80) digitalWrite(MOSI,HIGH); // If bit(7) of "data" is high
  26. else digitalWrite(MOSI,LOW); // if bit(7) of "data" is low
  27. digitalWrite(SCK,HIGH); // Serial Clock Rising Edge
  28. data <<= 1; // Shift "data" to the left by one bit
  29. if(digitalRead(MISO)==HIGH) data |= 0x01; // If bit of slave data is high
  30. else data &= ~0x01; // if bit of slave data is low
  31. digitalWrite(SCK,LOW); // Serial Clock Falling Edge
  32. }
  33. return data; // Returns shifted data in value
  34. }
  35. void SoftSpi::begin(){
  36. }
  37. void SoftSpi::end(){
  38. }
  39. SoftSpi MirfSoftwareSpi;
  40. void setup() {
  41. pinMode(MOSI, OUTPUT);
  42. pinMode(MISO, INPUT);
  43. pinMode(SCK, OUTPUT);
  44. pinMode(SS, OUTPUT);
  45. pinMode(BUTTON, OUTPUT);
  46. // Setup
  47. Mirf.spi = &MirfSoftwareSpi;
  48. Mirf.csnPin = 5;
  49. Mirf.init();
  50. Mirf.payload = 1;
  51. Mirf.setRADDR((byte *)"clie1");
  52. Mirf.config();
  53. }
  54. void loop() {
  55. Mirf.setTADDR((byte *)"serv1");
  56. data[0] = 1;
  57. Mirf.send((byte *)data);
  58. digitalWrite(BUTTON, HIGH);
  59. // while(Mirf.isSending()){}
  60. // delay(1000);
  61. data[0] = 2;
  62. Mirf.send((byte *)data);
  63. digitalWrite(BUTTON, LOW);
  64. // while(Mirf.isSending()){}
  65. // delay(1000);
  66. /*
  67. value = digitalRead(BUTTON);
  68. if(value != prev){
  69. Mirf.setTADDR((byte *)"serv1");
  70. prev = value;
  71. if(value==HIGH){//button not pressed, LED should be off
  72. send = 2;
  73. }
  74. else if(value == LOW){//button has been pressed
  75. send = 1;
  76. }
  77. Mirf.send(&send);
  78. while(!Mirf.isSending()){}
  79. }
  80. */
  81. }